package com.agilya.dao.daointerface;

import java.util.List;

import com.agilya.dao.exception.DAOExceptions;
import com.agilya.modele.Proposition;
import com.agilya.modele.Question;

public interface QuestionDAO {

	/**
	 * Retourne toutes les questions par QCM
	 * 
	 * @param idqcm
	 * @return liste de question
	 * @throws DAOExceptions
	 */
	public List<Question> getAllQuestionByQCM(int idqcm) throws DAOExceptions;

	/**
	 * Retourne une question par son id
	 * 
	 * @param idquestion
	 * @return question
	 * @throws DAOExceptions
	 */
	public Question getQuestionById(int idquestion) throws DAOExceptions;

	/**
	 * Retourne toutes les propositions actives d'une question
	 * 
	 * @param idquestion
	 * @return liste de proposition actives
	 * @throws DAOExceptions
	 */
	public List<Proposition> getAllPropositionsActivesByQuestion(int idquestion) throws DAOExceptions;

	/**
	 * Retourne toutes les propositions d'une question
	 * 
	 * @param idquestion
	 * @return liste de proposition
	 * @throws DAOExceptions
	 */
	public List<Proposition> getAllPropositionsByQuestion(int idquestion) throws DAOExceptions;

	/**
	 * Retourne une proposition par son ID
	 * 
	 * @param idproposition
	 * @return une proposition
	 * @throws DAOExceptions
	 */
	public Proposition getPropositionById(int idproposition) throws DAOExceptions;

	/**
	 * Retourne toutes les bonnes propositions pour une question
	 * 
	 * @param idquestion
	 * @return une liste de bonnes propositions
	 * @throws DAOExceptions
	 */
	public List<Proposition> getAllBonnesPropositionsByQuestion(int idquestion) throws DAOExceptions;

	/**
	 * Retourne toutes les questions et propositions pour un QCM
	 * 
	 * @param idqcm
	 * @return une liste de questions avec leurs propositions
	 * @throws DAOExceptions
	 */
	public List<Question> getAllQuestionsEtPropositionsByQCM(int idqcm) throws DAOExceptions;

	/**
	 * Retourne toutes les questions d'un chapitre
	 * 
	 * @param idChapitre
	 * @return une liste de questions
	 * @throws DAOExceptions
	 */
	public List<Question> getAllQuestionByChapitre(int idChapitre) throws DAOExceptions;

	/**
	 * Retourne toutes les questions et propositions d'un chapitre
	 * 
	 * @param idChapitre
	 * @return liste de questions
	 * @throws DAOExceptions
	 */
	public List<Question> getAllQuestionEtPropositionsByChapitre(int idChapitre) throws DAOExceptions;

	// prevoir d'ajouter un sachant, proprietaire de la question
	/**
	 * enregistre une question et l'affecte a un chapitre
	 * 
	 * @param q
	 *            question
	 * @param idChapitre
	 * @return l'id de la question qui vient d'etre enregistree
	 * @throws DAOExceptions
	 */
	public Integer enregistrer(Question q, int idChapitre) throws DAOExceptions;

	/**
	 * enregistre une proposition et l'affecte a une question
	 * 
	 * @param proposition
	 * @param idquestion
	 * @return l'id de la proposition
	 * @throws DAOExceptions
	 */
	public Integer enregistrer(Proposition proposition, int idquestion) throws DAOExceptions;
}
